home *** CD-ROM | disk | FTP | other *** search
/ Gold Medal Software 3 / Gold Medal Software - Volume 3 (Gold Medal) (1994).iso / print / ds20ae.arj / DS20AE.ARJ / DS2.MS_ / DS2.MS
Text File  |  1993-08-20  |  25KB  |  885 lines

  1. '**************************************************************************
  2. '*                       DeskScan II v2.00 Setup
  3. '**************************************************************************
  4.  
  5. '''$DEFINE DEBUG  ''Define for script development/debugging
  6.  
  7. '$INCLUDE 'setupapi.inc'
  8. '$INCLUDE 'ds2util.inc'
  9. '$INCLUDE 'msdetect.inc'
  10.  
  11. ''Constants taken from windows.h (SDK version 3.1)
  12. CONST WS_VISIBLE =      &H10000000
  13. CONST WS_BORDER =       &H00800000
  14. CONST WS_CLIPCHILDREN = &H02000000
  15. CONST GWL_STYLE = -16
  16. CONST SW_SHOWMAXIMIZED = 3
  17.  
  18. ''Dialog ID's
  19. CONST WELCOME           = 100
  20. CONST ASKQUIT           = 200
  21. CONST DESTPATH          = 300
  22. CONST EXITFAILURE       = 400
  23. CONST EXITQUIT          = 600
  24. CONST EXITSUCCESS       = 700
  25. CONST OPTIONS           = 800
  26. CONST APPHELP           = 900
  27. CONST APPHELP1           = 901
  28. CONST APPHELP2          = 902
  29. CONST APPHELP3          = 903
  30. CONST APPHELP4          = 904
  31. CONST APPHELP5          = 905
  32. CONST APPHELP6          = 906
  33. CONST APPHELP7          = 907
  34. CONST OLDDRIVEROPTION   = 1000
  35. CONST MODIFYCONFIG      = 1010
  36. CONST MODIFYSYSTEMINI   = 1020
  37. CONST INSERTREF         = 1050
  38.  
  39. CONST MODIFYPATH        = 1030
  40. CONST SINGLELIST        = 1900
  41. CONST GROUPLIST         = 2000
  42. CONST CARDOPTIONS       = 2010
  43. CONST CARDNOTE            = 2015
  44. CONST ERRORSPACE        = 2030
  45. CONST EXITSUCCESSASPI   = 2035
  46. CONST CHECK                = 2500
  47. CONST CUSTINST            = 6200
  48. CONST BADPATH           = 6400
  49. CONST CDCONFIRMINFO     = 7300
  50.  
  51. CONST ERR_WINDOWSVERSION      =    8000
  52. CONST ERR_WINDOWSMODE          =    8001
  53. CONST STR_OPTIONALSCSICARD      =    8002
  54. CONST STR_DIR                  =    8003
  55. CONST STR_PROGMANGROUP          =    8004
  56. CONST STR_SCANNER              =    8005
  57. CONST STR_INTERFACECARD          =    8006
  58. CONST ERR_CORRUPTSOURCES      =    8007
  59.  
  60. CONST ERR_PORT    = 8000
  61.  
  62. ''Bitmap ID
  63. CONST LOGO = 1
  64.  
  65. GLOBAL ExtraCosts$                    ''List of extra costs to add per drive.
  66. GLOBAL DestCost&
  67. GLOBAL WinCost&
  68. GLOBAL DestFree&
  69. GLOBAL WinFree&
  70.  
  71. GLOBAL DriversList$
  72.  
  73. GLOBAL ASPIFound%
  74. GLOBAL CAMFound%
  75.  
  76. GLOBAL WinMajVer%
  77. GLOBAL WinMinVer%
  78. GLOBAL WinMode%
  79. GLOBAL WinDir$                        ''Windows directory.
  80. GLOBAL TwainDir$                    ''Directory for the Twain DSM.
  81. GLOBAL DEST$                        ''Default destination directory.
  82. GLOBAL OptScanner(2) AS STRING        ''Scanner installation option.
  83. GLOBAL ScannerPick$                    ''Text for 'ScannerChoice'.
  84. GLOBAL ScannerChoice%                '' 1 for ScanJetII family,
  85.                                     '' 2 for ScanJet Plus,
  86. GLOBAL AskModSysIni%
  87. GLOBAL UsingOldDriver%
  88. GLOBAL ConfigFile$
  89. GLOBAL OPTSETUP$                    ''Setup type option selection.
  90. GLOBAL OPTCard$                        ''Option to use existing card.
  91. GLOBAL OPTCardText(3) AS STRING        ''Text for selected card option.
  92. GLOBAL DEFAULTGROUP$                ''Default group name.
  93. GLOBAL GROUP$                        ''Selected group name.
  94. GLOBAL SystemArchitecture$            ''Detected architecture.
  95. GLOBAL LISTMADE%                    ''True if group names list has been
  96.                                     '' made, False otherwise.
  97. GLOBAL DS2Cui$
  98.  
  99.  
  100. DECLARE SUB Install
  101. DECLARE SUB CalcCopyCost
  102. DECLARE FUNCTION MakePath (szDir$, szFile$) AS STRING
  103.  
  104.  
  105. INIT:
  106.  
  107.     DS2Cui$ = "ds2cui.dll"             ''Custom UI stuff for DS2
  108.  
  109. ''    Verify Windows version and mode.
  110. ''    Windows ver. 3.x and Windows NT.
  111.     WinMajVer% = GetWindowsMajorVersion()
  112.     IF WinMajVer% < 3 THEN
  113.         errStr$ = STRING$(128,32)
  114.         i% = AcquireString(ERR_WINDOWSVERSION, errStr$, 128)
  115.         i% = DoMsgBox(errStr$, "Setup", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  116.         dlg% = EXITFAILURE
  117.         GOTO QUITL1
  118.     END IF
  119.     WinMinVer% = GetWindowsMinorVersion()
  120.  
  121.     WinMode% = GetWindowsMode()
  122.     IF WinMode% = 0 THEN
  123.         errStr$ = STRING$(128,32)
  124.         i% = AcquireString(ERR_WINDOWSMODE, errStr$, 128)
  125.         i% = DoMsgBox(errStr$,  "Setup", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  126.         dlg% = EXITFAILURE
  127.         GOTO QUITL1
  128.     END IF
  129.  
  130. ''    Display main window frame maximized.
  131.     hWnd% = HwndFrame()
  132.     j% = MoveWindow(hWnd%, 0, 0, GetScreenWidth(), GetScreenHeight(), 0) 
  133.  
  134.  
  135.  
  136. ''    Create place holders for setup information that will be displayed
  137. ''    in a "ConfirmInfo" dialog.  One "AddListItem" is needed for each
  138. ''    piece of data that will be displayed.  The NULLs will be replaced
  139. ''    based on information entered by the user.
  140.     AddListItem "ConfirmTextIn", ""
  141.     AddListItem "ConfirmTextIn", ""
  142.     AddListItem "ConfirmTextIn", ""
  143.     AddListItem "ConfirmTextIn", ""
  144.     AddListItem "ConfirmTextIn", ""
  145.  
  146.     OptScanner(0) = "ScanJet IIp, IIc, IIcx "
  147.     OptScanner(1) = "ScanJet Plus "
  148.     ScannerPick$ = OptScanner(0)
  149.     
  150.     SystemArchitecture$ = "ISA"
  151.  
  152.     DriversList$ = "SJDrivers"
  153.     AddListItem DriversList$, "SJDRIVER.SYS"    
  154.     AddListItem DriversList$, "MINI400I.SYS"    
  155.     AddListItem DriversList$, "SJIIX.SYS"    
  156.     AddListItem DriversList$, "SJII.SYS"
  157.     SetSymbolValue "SJIIDriverFound", "0"
  158.     SetSymbolValue "WIN30VxD", "WIN400OI.386"
  159.     SetSymbolValue "WIN31VxD", "WIN400I.386"
  160.     SetSymbolValue "ScannerVxD", "HPSCANR.386"
  161.     
  162.     WinDir$ = GetWindowsDir()
  163.  
  164.     SetSymbolValue "ConfigTemp", "C:\CONFIG.TMP"    
  165.     SetSymbolValue "AutoexecTemp", "C:\AUTOEXEC.TMP"
  166.     SetSymbolValue "SysIniTemp", WinDir$+"SYSTEM.TMP"    
  167.     
  168.     SetSymbolValue "ConfigBackup", "C:\CONFIG.DS2"    
  169.     SetSymbolValue "AutoexecBackup", "C:\AUTOEXEC.DS2"    
  170.     SetSymbolValue "SysIniBackup", WinDir$+"SYSTEM.DS2"    
  171.  
  172.  
  173.     HELPPROC$ = "FHelpDlgProc"          ''Help dialog procedure
  174.     HELP1PROC$ = "FHelp1DlgProc"          ''Help dialog procedure
  175.     HELP2PROC$ = "FHelp2DLgProc"          ''Help dialog procedure
  176.     HELP3PROC$ = "FHelp3DLgProc"          ''Help dialog procedure
  177.     HELP4PROC$ = "FHelp4DlgProc"          ''Help dialog procedure
  178.     HELP5PROC$ = "FHelp5DlgProc"          ''Help dialog procedure
  179.     HELP6PROC$ = "FHelp6DlgProc"          ''Help dialog procedure
  180.     HELP7PROC$ = "FHelp7DlgProc"          ''Help dialog procedure
  181.  
  182.     SetBitmap DS2Cui$, LOGO
  183.     SetTitle "DeskScan II v2.00 Setup"
  184.  
  185. ''    Get the directory where the setup files are and read the
  186. ''  .inf file.
  187.     szInf$ = GetSymbolValue("STF_SRCINFPATH")
  188.     IF szInf$ = "" THEN
  189.         szInf$ = GetSymbolValue("STF_CWDDIR") + "DS2.INF"
  190.     END IF
  191.     ReadInfFile szInf$
  192.  
  193.     DEFAULTGROUP$ = "DeskScan"
  194.     GROUP$ = DEFAULTGROUP$
  195.     LISTMADE% = 0
  196.     OPTSETUP$ = "1"
  197.  
  198.     ScannerChoice% = 1
  199.     OPTCard$ = "1"
  200.     SetSymbolValue "OPTCard", OPTCard$
  201.     cardStr$ = STRING$(128,32)
  202.     i% = AcquireString(STR_INTERFACECARD, cardStr$, 128)
  203.     OPTCardText(0) = "HP " + cardStr$
  204.     i% = AcquireString(STR_OPTIONALSCSICARD, cardStr$, 128)
  205.     OPTCardText(1) = cardStr$
  206.     OPTCardText(2) = "ScanJet Plus Card"
  207.  
  208.     ASPIFound% = 0
  209.     DEST$ = "C:\DESKSCAN"
  210.     SetSymbolValue "InstallDir", DEST$
  211.     TwainDir$ = WinDir$ + "TWAIN"
  212.  
  213.     AddListItem "SettingsTextIn", DEST$
  214.     AddListItem "SettingsTextIn", GROUP$
  215.     AddListItem "SettingsTextIn", OptScanner(0)
  216.     AddListItem "SettingsTextIn", OPTCardText(0)
  217.  
  218.     AddListItem "DiskSpaceData", MID$(DEST$, 1, 2)
  219.     AddListItem "DiskSpaceData", ""
  220.     AddListItem "DiskSpaceData", ""
  221.     AddListItem "DiskSpaceData", MID$(WinDir$, 1, 2)
  222.     AddListItem "DiskSpaceData", ""
  223.     AddListItem "DiskSpaceData", ""
  224.     DestCost& = 0
  225.     WinCost& = 0
  226.     DestFree& = 0
  227.     WinFree& = 0
  228.  
  229. '$IFDEF DEBUG
  230.     i% = SetSizeCheckMode(scmOnIgnore)    '' could use scmOff; def = scmOnFatal
  231.     WinDrive$ = MID$(GetWindowsDir, 1, 1)
  232.     IF IsDriveValid(WinDrive$) = 0 THEN
  233.         i% = DoMsgBox("Windows drive ('"+WinDrive$+"') is not a valid drive.", "DEBUG", MB_TASKMODAL+MB_ICONHAND+MB_OK)
  234.         GOTO QUIT
  235.     END IF
  236. '$ENDIF ''DEBUG
  237.  
  238.  
  239. WELCOME:
  240.     sz$ = UIStartDlg(DS2Cui$, WELCOME, "FInfoDlgProc", APPHELP1, HELP1PROC$)
  241.     IF sz$ = "CONTINUE" THEN
  242.         UIPop 1
  243.     ELSE
  244.         GOSUB ASKQUIT
  245.         GOTO WELCOME
  246.     END IF
  247.  
  248. ''    Get information about the system.
  249.     IF IsItEISA = 1 THEN
  250.         SystemArchitecture$ = "EISA"
  251.         SetSymbolValue "SystemArchitecture", "Extended Industry Standard Architecture (EISA)"
  252.     ''    i% = DoMsgBox("SetUp has detected an EISA system.", "SetUp", MB_TASKMODAL+MB_OK)
  253.     ELSEIF IsItMCA = 2 THEN
  254.         SystemArchitecture$ = "MCA"
  255.         SetSymbolValue "SystemArchitecture", "MicroChannel Architecture (MCA)"
  256.     ''    i% = DoMsgBox("SetUp has detected an MCA system.", "SetUp", MB_TASKMODAL+MB_OK)
  257.     ELSE
  258.         SystemArchitecture$ = "ISA"
  259.         SetSymbolValue "SystemArchitecture", "AT Backplane"
  260.     ''    i% = DoMsgBox("SetUp has detected an ISA system.", "SetUp", MB_TASKMODAL+MB_OK)
  261.     END IF
  262.  
  263. ''    IF (IsItNT()) THEN
  264. ''i% = DoMsgBox("SetUp has detected an NT system.", "SetUp", MB_TASKMODAL+MB_OK)
  265. ''    ENDIF
  266.  
  267.     ASPIFound% = FindASPI
  268.     CAMFound% = FindCAM
  269.  
  270. ''    Build the (default) copy list and compute the copy cost.
  271.     CalcCopyCost
  272.  
  273.  
  274. ''    Simple or Custom Setup options
  275. OPTION:
  276. ''    SetSymbolValue "RadioDefault", OPTSETUP$
  277. OPTL1:
  278.     sz$ = UIStartDlg(DS2Cui$, CUSTINST, "FCustomOptDlgProc", APPHELP2, HELP2PROC$)
  279.     OPTSETUP$ = GetSymbolValue("ButtonChecked")
  280.  
  281.     IF sz$ = "CONTINUE" THEN
  282.         OPTSETUP$ = "1"
  283.     ELSEIF sz$ = "REACTIVATE" THEN
  284.         GOTO OPTL1
  285.     ELSEIF sz$ = "CUSTOM" THEN
  286.         UIPop(1)    
  287.         OPTSETUP$ = "2"
  288.     ELSE
  289.          GOSUB ASKQUIT
  290.          UIPop 1
  291.         GOTO OPTION
  292.     END IF
  293.  
  294.  
  295.     IF (OPTSETUP$ = "1") THEN
  296.         IF DestFree& < DestCost& THEN
  297.             sz$ = UIStartDlg(DS2Cui$, ERRORSPACE, "FDiskErrorDlgProc", APPHELP1, HELP1PROC$)
  298.              UIPop 2
  299.             GOTO GETPATH
  300.         ELSE
  301.             UIPop 1
  302.         END IF
  303.         GOTO PORTCONFLICT
  304.     END IF
  305.  
  306.  
  307.  
  308. GETPATH:
  309.     SetSymbolValue "EditTextIn", DEST$
  310.     SetSymbolValue "EditFocus", "END"
  311. GETPATHL1:
  312.     sz$ = UIStartDlg(DS2Cui$, DESTPATH, "FEditDlgProc", APPHELP3, HELP3PROC$)
  313.     DEST$ = GetSymbolValue("EditTextOut")
  314.     SetSymbolValue "InstallDir", DEST$
  315.  
  316.     IF sz$ = "CONTINUE" THEN
  317.         IF IsDirWritable(DEST$) = 0 THEN
  318.             GOSUB BADPATH
  319.             GOTO GETPATHL1
  320.         END IF
  321.     ELSEIF sz$ = "REACTIVATE" THEN
  322.         GOTO GETPATHL1
  323.     ELSEIF sz$ = "BACK" THEN
  324.         UIPop 1
  325.         GOTO OPTION
  326.     ELSE
  327.         GOSUB ASKQUIT
  328.         GOTO GETPATH
  329.     END IF
  330.  
  331. ''    Build the (new) copy list and compute the copy cost.
  332.     CalcCopyCost
  333.     
  334.     IF (DestFree& < DestCost&) THEN
  335.         sz$ = UIStartDlg(DS2Cui$, ERRORSPACE, "FDiskErrorDlgProc", APPHELP1, HELP1PROC$)
  336.         UIPop 2
  337.         GOTO GETPATH
  338.     ELSE
  339.         UIPop 1
  340.     END IF
  341.  
  342.     IF OPTSETUP$ = "1" THEN
  343.         GOTO PORTCONFLICT
  344.     END IF
  345.  
  346.  
  347.  
  348. '' Select which scanner(s) is/are being installed.
  349. CHOOSESCANNER:
  350.     ScannerPick$ = ""
  351.     ScannerChoice% = 1
  352.  
  353. CHOOSESCANNERL1:
  354.     sz$ = UIStartDlg(DS2Cui$, OPTIONS, "FRadioDlgProc", APPHELP6, HELP6PROC$)
  355.     szChoice$ = GetSymbolValue("ButtonChecked")
  356.  
  357.     IF (szChoice$ = "1") THEN
  358.         ScannerChoice% = 1
  359.     ELSE
  360.         ScannerChoice% = 2
  361.         OPTCard$ = "3"
  362.         SetSymbolValue "OPTCard", OPTCard$
  363.     ENDIF
  364.     ScannerPick$ = OptScanner(ScannerChoice% - 1)
  365.  
  366. ''    Need to recalc for change from default scanner install
  367.     CalcCopyCost
  368.  
  369.     IF sz$ = "CONTINUE" THEN
  370.         UIPop(1)
  371.     ELSEIF sz$ = "REACTIVATE" THEN
  372.         GOTO CHOOSESCANNERL1
  373.     ELSEIF sz$ = "BACK" THEN
  374.         UIPop 1
  375.         GOTO GETPATH
  376.     ELSE
  377.          GOSUB ASKQUIT
  378.         GOTO CHOOSESCANNER
  379.     END IF
  380.  
  381.  
  382. ''    Verify that an ASPI manager is in memory.  If one is found then
  383. ''    give user option to use it or not.
  384.     IF (ASPIFound% = 1 OR CAMFound% = 1) THEN
  385.         IF (IsDriverInConfig(GetListItem(DriversList$, 2)) = 1) THEN
  386.             GOTO GETGROUPNAME
  387.         ENDIF
  388.  
  389. ''        i% = DoMsgBox("SetUp has detected a SCSI manager.", "SetUp", MB_TASKMODAL+MB_OK)
  390.         GOTO CARDOPTION
  391.     ELSE
  392.         GOTO GETGROUPNAME
  393.     ENDIF
  394.  
  395.  
  396. ''    Option to use an existing SCSI card.  Assumes that the
  397. ''    ASPI or CAM manager for the card is already loaded.
  398. CARDOPTION:
  399. ''    This option is not available with a ScanJet Plus.
  400.     IF (ScannerChoice% = 2) THEN
  401.         OPTCard$ = "3"
  402.         SetSymbolValue "OPTCard", OPTCard$
  403.         GOTO GETGROUPNAME
  404.     ENDIF
  405.  
  406.     SetSymbolValue "RadioDefault", OPTCard$
  407.  
  408. CARDOPTIONL1:                 
  409.     sz$ = UIStartDlg(DS2Cui$, CARDOPTIONS, "FCardOptDlgProc", APPHELP5, HELP5PROC$)
  410.     OPTCard$ = GetSymbolValue("ButtonChecked")
  411.     SetSymbolValue "OPTCard", OPTCard$
  412.     
  413.  
  414.     IF sz$ = "CONTINUE" THEN
  415.         UIPop(1)
  416.     ELSEIF sz$ = "REACTIVATE" THEN
  417.         GOTO CARDOPTIONL1
  418.     ELSEIF sz$ = "BACK" THEN
  419.         UIPop 1
  420.         GOTO CHOOSESCANNER
  421.     ELSE
  422.          GOSUB ASKQUIT
  423.         GOTO CARDOPTION
  424.     END IF
  425.  
  426.  
  427. GETGROUPNAME:
  428.     IF LISTMADE% = 0 THEN
  429.         AddListItem "ListGroupsIn", DEFAULTGROUP$
  430.         LISTMADE% = 1
  431.     ENDIF
  432.     SetSymbolValue "ListGroupsOut", DEFAULTGROUP$
  433.  
  434. GETGROUPNAMEL1:
  435.     sz$ = UIStartDlg(DS2Cui$, GROUPLIST, "FGroupsDlgProc", APPHELP4, HELP4PROC$)
  436.     GROUP$ = GetSymbolValue("EditGroupOut")
  437. ''i% = DoMsgBox(GROUP$,"Verify Info", MB_TASKMODAL+MB_OK)
  438.  
  439.     IF sz$ = "CONTINUE" THEN
  440.         UIPop 1
  441.     ELSEIF sz$ = "REACTIVATE" THEN
  442.         GOTO GETGROUPNAMEL1
  443.     ELSEIF sz$ = "BACK" THEN
  444.         UIPop 1
  445.         IF ASPIFound% = 1 OR CAMFound% = 1 THEN
  446.             GOTO CARDOPTION
  447.         ELSE
  448.             GOTO CHOOSESCANNER
  449.         ENDIF
  450.     ELSE
  451.         GOSUB ASKQUIT
  452.         GOTO GETGROUPNAME
  453.     END IF
  454.  
  455.  
  456.  
  457. CONFIRMINFO:
  458.     genericStr$ = STRING$(128,32)
  459.     i% = AcquireString(STR_DIR, genericStr$, 128)
  460.     ReplaceListItem "ConfirmTextIn", 1, genericStr$+" : "+DEST$
  461.  
  462.     i% = AcquireString(STR_PROGMANGROUP, genericStr$, 128)
  463.     ReplaceListItem "ConfirmTextIn", 2, genericStr$+" : "+GROUP$
  464.  
  465.     i% = AcquireString(STR_SCANNER, genericStr$, 128)
  466.     ReplaceListItem "ConfirmTextIn", 3, genericStr$+" :   "+ScannerPick$
  467.  
  468.     i% = AcquireString(STR_INTERFACECARD, genericStr$, 128)
  469.     IF OPTCard = "1" THEN
  470.         ReplaceListItem "ConfirmTextIn", 4, genericStr$+" :   "+OPTCardText(0)
  471.     ELSEIF OPTCard = "2" THEN    
  472.         ReplaceListItem "ConfirmTextIn", 4, genericStr$+" :   "+OPTCardText(1)
  473.     ELSE
  474.         ReplaceListItem "ConfirmTextIn", 4, genericStr$+" :   "+OPTCardText(0)
  475.     END IF
  476.  
  477.     sz$ = UIStartDlg(DS2Cui$, CDCONFIRMINFO, "FConfirmDlgProc", APPHELP1, HELP1PROC$)
  478.     IF sz$ = "CONTINUE" THEN
  479.         UIPop 1
  480.     ELSEIF sz$ = "BACK" THEN
  481.         UIPop 1
  482.         GOTO OPTION
  483.     END IF
  484.  
  485.  
  486. PORTCONFLICT:
  487. ''    Begin installation
  488.     Install
  489.  
  490. ''    ERR = ERR_PORT
  491.  
  492. QUIT:
  493.     ON ERROR GOTO ERRQUIT
  494.  
  495.     IF ERR = 0 THEN
  496.         IF OPTCard$ = "1" OR OPTCard$ = "3" THEN
  497.             dlg% = EXITSUCCESS
  498.         ELSE
  499.             sz$ = UIStartDlg(DS2Cui$, EXITSUCCESSASPI, "FInfo0DlgProc", 0, "")
  500.             UIPop 1
  501.             GOTO ALL_DONE
  502.         ENDIF
  503.  
  504.     ELSEIF ERR = STFQUIT THEN
  505.         dlg% = EXITQUIT
  506.  
  507.     ELSEIF ERR = ERR_PORT THEN
  508.         sz$ = UIStartDlg(DS2Cui$, EXITFAILURE, "FInfo0DlgProc", 0, "")
  509.         UIPop 1
  510.         GOTO ALL_DONE
  511.  
  512.     ELSE
  513.         dlg% = EXITFAILURE
  514.     END IF
  515. QUITL1:
  516.     sz$ = UIStartDlg(DS2Cui$, dlg%, "FInfo0DlgProc", 0, "")
  517.     IF sz$ = "REACTIVATE" THEN
  518.         GOTO QUITL1
  519.     END IF
  520.     UIPop 1
  521.  
  522. ALL_DONE:
  523.     END        '' This is an exit point for the script.
  524.  
  525. ERRQUIT:
  526.     errStr$ = STRING$(128,32)
  527.     i% = AcquireString(ERR_CORRUPTSOURCES, errStr$, 128)
  528.     i% = DoMsgBox(errStr$, "Setup", MB_OK+MB_TASKMODAL+MB_ICONHAND)
  529.     END        '' This is an exit point for the script.
  530.  
  531.  
  532.  
  533. BADPATH:
  534.     sz$ = UIStartDlg(DS2Cui$, BADPATH, "FInfo0DlgProc", 0, "")
  535.     IF sz$ = "REACTIVATE" THEN
  536.         GOTO BADPATH
  537.     END IF
  538.     UIPop 1
  539.     RETURN
  540.  
  541.  
  542.  
  543. ASKQUIT:
  544.     sz$ = UIStartDlg(DS2Cui$, ASKQUIT, "FQuitDlgProc", 0, "")
  545.  
  546.     IF sz$ = "EXIT" THEN
  547.         UIPopAll
  548.         ERROR STFQUIT
  549.     ELSEIF sz$ = "REACTIVATE" THEN
  550.         GOTO ASKQUIT
  551.     ELSE
  552.         UIPop 1
  553.     END IF
  554.     RETURN
  555.  
  556.  
  557.  
  558. '*************************************************************************
  559. '**
  560. '** Purpose:
  561. '**     Builds the copy list and computes the copy cost.
  562. '** Arguments:
  563. '**     none.
  564. '** Returns:
  565. '**     none.
  566. '*************************************************************************
  567. SUB CalcCopyCost STATIC
  568.  
  569. ''    Start with a clean list.
  570.     ClearCopyList
  571.  
  572.     SrcDir$ = GetSymbolValue("STF_SRCDIR")
  573.  
  574.  
  575.     AddSectionFilesToCopyList "Files", SrcDir$, DEST$
  576.  
  577. ''    Select which "config" files need to be copied
  578.     IF SystemArchitecture$ = "EISA" THEN
  579.         IF ScannerChoice% = 1 THEN
  580.             AddSectionFilesToCopyList "ScanJet II family EISA", SrcDir$, DEST$
  581.         ELSEIF ScannerChoice% = 2 THEN
  582.             AddSectionFilesToCopyList "ScanJet Plus EISA", SrcDir$, DEST$
  583.         ELSE
  584.             AddSectionFilesToCopyList "ScanJet II family EISA", SrcDir$, DEST$
  585.             AddSectionFilesToCopyList "ScanJet Plus EISA", SrcDir$, DEST$
  586.         END IF
  587.     ELSEIF SystemArchitecture$ = "MCA" THEN
  588.         IF ScannerChoice% = 1 THEN
  589.             AddSectionFilesToCopyList "ScanJet II family MCA", SrcDir$, DEST$
  590.         ELSEIF ScannerChoice% = 2 THEN
  591.             AddSectionFilesToCopyList "ScanJet Plus MCA", SrcDir$, DEST$
  592.         ELSE
  593.             AddSectionFilesToCopyList "ScanJet II family MCA", SrcDir$, DEST$
  594.             AddSectionFilesToCopyList "ScanJet Plus MCA", SrcDir$, DEST$
  595.         END IF
  596.     END IF
  597.  
  598. ''    choose between 'swtchset.exe' and 'sjswitch.exe'
  599.     IF ScannerChoice% = 1 THEN
  600.         AddSectionFilesToCopyList "ScanJet II family", SrcDir$, DEST$
  601.     ELSEIF ScannerChoice% = 2 THEN
  602.         AddSectionFilesToCopyList "ScanJet Plus", SrcDir$, DEST$
  603.     ELSE
  604.         AddSectionFilesToCopyList "ScanJet II family", SrcDir$, DEST$
  605.         AddSectionFilesToCopyList "ScanJet Plus", SrcDir$, DEST$
  606.     END IF
  607.  
  608.     AddSectionFilesToCopyList "Windows", SrcDir$, WinDir$
  609.     AddSectionFilesToCopyList "Windows:Twain", SrcDir$, TwainDir$
  610.  
  611.     IF (WinMinVer% = 0) THEN
  612. ''        AddSectionFilesToCopyList "Windows 3.0 Drivers", SrcDir$, DEST$
  613.         IF (NOT DoesFileExist(WinDir$+"SYSTEM\COMMDLG.DLL", femExists)) AND    (NOT DoesFileExist(WinDir$+"COMMDLG.DLL", femExists)) THEN
  614.             AddSectionFilesToCopyList "Windows 3.0 compat", SrcDir$, WinDir$+"SYSTEM\"
  615.         ENDIF
  616.     ELSE
  617.         AddSectionFilesToCopyList "Windows 3.1 Drivers", SrcDir$, DEST$
  618.         AddSectionFilesToCopyList "HP Windows Drivers", SrcDir$, DEST$
  619.     ENDIF
  620.  
  621.     AddSectionFilesToCopyList "DOS Drivers", SrcDir$, DEST$
  622.     AddSectionFilesToCopyList "ScanJet Plus Drivers", SrcDir$, DEST$
  623.  
  624.     AddSectionFilesToCopyList "HP SCSI Driver", SrcDir$, DEST$
  625.  
  626.  
  627.     CostPerDisk$ = "CostPerDisk"
  628.     StillNeed& = GetCopyListCost(ExtraCosts$, CostPerDisk$,"")
  629.     DestCost& = 0
  630.     WinCost& = 0
  631.     cost& = 0
  632.  
  633.     FOR i% = 1 to 26 STEP 1
  634.         cost& = VAL(GetListItem(CostPerDisk$, i%))
  635. ''k% = DoMsgBox("drive ("+CHR$(i% + ASC("A")-1)+") cost ("+str$(cost&)+").", "Copy Costs", MB_TASKMODAL+MB_OK)
  636.     NEXT i%
  637.  
  638.     DestDrive$ = MID$(DEST$, 1, 1)
  639.     i% = ASC(ucase$(DestDrive$)) - ASC("A") + 1
  640.     DestCost& = VAL(GetListItem(CostPerDisk$, i%))
  641.     IF (DestCost& < 0) THEN
  642.         DestCost& = 0
  643.     ENDIF
  644.  
  645.     ReplaceListItem "DiskSpaceData", 1, " " + DestDrive$ + ":"
  646.     ReplaceListItem "DiskSpaceData", 2, STR$(DestCost& / 1024) + " K"
  647.     drive$ = MID$(DEST$, 1, 1)
  648.     DestFree& = GetFreeSpaceForDrive(drive$)
  649.     IF (DestFree& < 0) THEN
  650.         DestFree& = 0
  651.     ENDIF
  652.     ReplaceListItem "DiskSpaceData", 3, STR$(DestFree& / 1024) + " K"
  653.  
  654.     WinDrive$ = MID$(WinDir$, 1, 1)
  655.     ndrive% = ASC(ucase$(WinDrive$)) - ASC("A") + 1
  656.     WinCost& = VAL(GetListItem(CostPerDisk$, ndrive%))
  657.     IF (WinCost& < 0) THEN
  658.         WinCost& = 0
  659.     ENDIF
  660. ''i% = DoMsgBox("Windows drive ('"+str$(ndrive%)+"') index in list.", "Copy Costs", MB_TASKMODAL+MB_OK)
  661.     ReplaceListItem "DiskSpaceData", 5, STR$(WinCost& / 1024) + " K"
  662.  
  663.     WinFree& = GetFreeSpaceForDrive(WinDrive$)
  664.     IF (WinFree& < 0) THEN
  665.         WinFree& = 0
  666.     ENDIF
  667.     ReplaceListItem "DiskSpaceData", 6, STR$(WinFree& / 1024) + " K"
  668.  
  669.     CostPerDisk$ = ""
  670.  
  671. END SUB
  672.  
  673.  
  674. '*************************************************************************
  675. '**
  676. '** Purpose:
  677. '**     Performs all installation operations.
  678. '** Arguments:
  679. '**     none.
  680. '** Returns:
  681. '**     none.
  682. '*************************************************************************
  683. SUB Install STATIC
  684.  
  685.     CreateDir DEST$, cmoNone
  686.  
  687. ''    OpenLogFile MakePath(DEST$, "LOGFILE.OUT"), 0
  688.  
  689.     CopyFilesInCopyList
  690.  
  691. ''i% = DoMsgBox("Create group "+GROUP$, "HP ScanJet II Setup", MB_TASKMODAL++MB_OK)
  692.     CreateProgmanGroup GROUP$, "", cmoNone
  693.     ShowProgmanGroup  GROUP$, 1, cmoNone
  694.     CreateProgManItem GROUP$, "DeskScan II", MakePath(DEST$, "deskscan.exe"), "", cmoOverwrite
  695.     CreateProgManItem GROUP$, "SCSI Addresses", MakePath(DEST$, "scsiaddr.exe"), "", cmoOverwrite
  696.     CreateProgManItem GROUP$, "Scanner Test", MakePath(DEST$, "scantest.exe"), "", cmoOverwrite
  697.     CreateProgManItem GROUP$, "README.TXT", "notepad.exe " + MakePath(DEST$, "readme.txt"), "", cmoOverwrite
  698.  
  699. ''    CloseLogFile
  700.  
  701.     
  702.     AskModSysIni% = 0
  703.     UsingOldDriver% = 0                '' old SCSI Driver
  704.  
  705.     CopyFile "C:\CONFIG.SYS", GetSymbolValue("ConfigBackup"), cmoOverwrite,0
  706.     sz$ = UIStartDlg(DS2Cui$, MODIFYCONFIG, "FModifyConfigDlgProc", APPHELP1, HELP1PROC$)
  707.     UIPop 1
  708.     
  709.     Test$ = GetSymbolValue("SJIIDriverFound")
  710.     IF (Test$ = "1") THEN
  711.         sz$ = UIStartDlg(DS2Cui$, OLDDRIVEROPTION, "FYesNoDlgProc", APPHELP1, HELP1PROC$)
  712.         UIPop 1
  713.  
  714.         IF (sz$ = "CONTINUE") THEN        '' 'Yes' using new driver...
  715.             CopyFile GetSymbolValue("ConfigTemp"), "C:\CONFIG.SYS", cmoOverwrite,0
  716.             RemoveFile GetSymbolValue("ConfigTemp"), cmoNone
  717.             AskModSysIni% = 1
  718.             Test$ = "0"
  719.         ELSE                            '' 'No' not using new driver...
  720.             AskModSysIni% = 0
  721.             UsingOldDriver% = 1
  722.             IF DoesFileExist(GetSymbolValue("ConfigTemp"), femExists) THEN
  723.                 RemoveFile GetSymbolValue("ConfigTemp"), cmoNone
  724.             ENDIF
  725.         ENDIF
  726.  
  727.     ELSE
  728.         IF DoesFileExist(GetSymbolValue("ConfigTemp"), femExists) THEN
  729.             AskModSysIni% = 1
  730.             CopyFile GetSymbolValue("ConfigTemp"), "C:\CONFIG.SYS", cmoOverwrite,0
  731.             RemoveFile GetSymbolValue("ConfigTemp"), cmoNone
  732.         ELSE        '' CONFIG.SYS is not being modified --> delete backup file
  733.             RemoveFile GetSymbolValue("ConfigBackup"), cmoNone
  734.             i% = IsDriverInConfig(GetListItem(DriversList$,3))    '' SJIIX.SYS
  735.             IF (i%=1) THEN
  736.                 AskModSysIni% = 1
  737.             ENDIF
  738.         ENDIF
  739.     ENDIF
  740.     
  741.     sz$ = UIStartDlg(DS2Cui$, MODIFYPATH, "FYesNoDlgProc", APPHELP1, HELP1PROC$)
  742.     UIPop 1
  743.     IF sz$ = "CONTINUE" THEN
  744.         CopyFile "C:\AUTOEXEC.BAT", GetSymbolValue("AutoexecBackup"), cmoOverwrite,0
  745.         i% = ModifyAutoexec()
  746.         CopyFile GetSymbolValue("AutoexecTemp"), "C:\AUTOEXEC.BAT", cmoOverwrite,0
  747.         RemoveFile GetSymbolValue("AutoexecTemp"), cmoNone
  748.     ENDIF
  749.  
  750.     IF (AskModSysIni% = 1 AND ScannerChoice% = 1 AND WinMinVer% <> 0 AND OPTCard$ = "1") THEN
  751.         sz$ = UIStartDlg(DS2Cui$, MODIFYSYSTEMINI, "FYesNoDlgProc", APPHELP1, HELP1PROC$)
  752.         UIPop 1
  753.         IF sz$ = "CONTINUE" THEN
  754.             CopyFile WinDir$+"SYSTEM.INI", GetSymbolValue("SysIniBackup"), cmoOverwrite,0
  755.             i% = ModifySysIni()
  756.             RemoveFile WinDir$+"SYSTEM.INI", cmoNone
  757.             RenameFile GetSymbolValue("SysIniTemp"), "SYSTEM.INI"
  758.         ENDIF
  759.     ENDIF
  760.  
  761. ''i% = DoMsgBox("System Architecture ('"+SystemArchitecture$+"')", "Ref Disk", MB_TASKMODAL+MB_OK)
  762.  
  763.     IF (OPTCard$ = "2") THEN
  764.         GOTO DONE                '' No need to copy config file for existing card!
  765.     ENDIF
  766.  
  767. ''    Configuration file stuff ... do this last because it requires
  768. ''    removing the installation disk...
  769.     IF (SystemArchitecture$ = "MCA") THEN
  770.         IF (ScannerChoice% = 2) THEN
  771.             ConfigFile$ = "@601f.adf"
  772.         ELSE
  773.             IF (ScannerChoice% = 1 OR ScannerChoice% = 0) THEN
  774.                 IF (AskModSysIni% = 0 OR Test$ = "1") THEN
  775.                     ConfigFile$ = "@621f.adf"
  776.                 ELSE
  777.                     ConfigFile$ = "@631f.adf"
  778.                 ENDIF
  779.             ENDIF
  780.         ENDIF
  781.  
  782.     ELSEIF (SystemArchitecture$ = "EISA") THEN
  783.         IF (ScannerChoice% = 2) THEN
  784.             ConfigFile$ = "!hwp1461.cfg"
  785.         ELSE
  786.             IF (ScannerChoice% = 1 OR ScannerChoice% = 0) THEN
  787.                 IF (AskModSysIni% = 0 OR Test$ = "1") THEN
  788.                     ConfigFile$ = "!hwp2002.cfg"
  789.                 ELSE
  790.                     ConfigFile$ = "!hwp2080.cfg"
  791.                 ENDIF
  792.             ENDIF
  793.         ENDIF
  794.         
  795.     ELSE    '' System Architecture is "ISA"
  796.         GOTO DONE
  797.     ENDIF
  798.  
  799. ''i% = DoMsgBox("File ('"+ConfigFile$+"')", "Ref Disk", MB_TASKMODAL+MB_OK)
  800.  
  801. GETREFDISK:
  802.     SetSymbolValue "EditTextIn", "A:\"
  803.     SetSymbolValue "EditFocus", "END"
  804. GETREFDISKL1:
  805.     sz$ = UIStartDlg(DS2Cui$, INSERTREF, "FRefDiskDlgProc", APPHELP1, HELP1PROC$)
  806.     refDisk$ = GetSymbolValue("EditTextOut")
  807.     tStr$ = refDisk$
  808.     IF (MID$(refDisk$,LEN(refDisk$)) <> "\") THEN
  809.         refDisk$ = tStr$ + "\"
  810.     ENDIF
  811.  
  812.     IF (sz$ = "CONTINUE") THEN
  813.         UIPop 1
  814.  
  815.         IF (IsDirWritable(refDisk$) = 0) THEN
  816.             GOSUB BADPATH
  817.             GOTO GETREFDISKL1
  818.         ENDIF
  819.         saveCursor% = ShowWaitCursor()
  820.         CopyFile DEST$+"\"+ConfigFile$, refDisk$+ConfigFile$, cmoNone, 0
  821.         RestoreCursor saveCursor%
  822.  
  823.     ELSEIF sz$ = "REACTIVATE" THEN
  824.         GOTO GETREFDISKL1
  825.     ELSEIF sz$ = "BACK" THEN
  826.         UIPop 1
  827.         GOTO DONE
  828.     ELSE
  829.          GOSUB ASKQUIT2
  830.         GOTO GETREFDISK
  831.     ENDIF
  832.  
  833. GOTO DONE
  834.  
  835. BADPATH:
  836.     sz$ = UIStartDlg(DS2Cui$, BADPATH, "FInfo0DlgProc", 0, "")
  837.     IF sz$ = "REACTIVATE" THEN
  838.         GOTO BADPATH
  839.     END IF
  840.     UIPop 1
  841.     RETURN
  842.  
  843.  
  844. ASKQUIT2:
  845.     sz$ = UIStartDlg(DS2Cui$, ASKQUIT, "FQuitDlgProc", 0, "")
  846.  
  847.     IF sz$ = "EXIT" THEN
  848.         UIPopAll
  849.         ERROR STFQUIT
  850.     ELSEIF sz$ = "REACTIVATE" THEN
  851.         GOTO ASKQUIT2
  852.     ELSE
  853.         UIPop 1
  854.     END IF
  855.     RETURN
  856.  
  857.  
  858. DONE:
  859. END SUB
  860.  
  861.  
  862. '*************************************************************************
  863. '**
  864. '** Purpose:
  865. '**     Appends a file name to the end of a directory path,
  866. '**     inserting a backslash character as needed.
  867. '** Arguments:
  868. '**     szDir$  - full directory path (with optional ending "\")
  869. '**     szFile$ - filename to append to directory
  870. '** Returns:
  871. '**     Resulting fully qualified path name.
  872. '*************************************************************************
  873. FUNCTION MakePath (szDir$, szFile$) STATIC AS STRING
  874.     IF szDir$ = "" THEN
  875.         MakePath = szFile$
  876.     ELSEIF szFile$ = "" THEN
  877.         MakePath = szDir$
  878.     ELSEIF MID$(szDir$, LEN(szDir$), 1) = "\" THEN
  879.         MakePath = szDir$ + szFile$
  880.     ELSE
  881.         MakePath = szDir$ + "\" + szFile$
  882.     END IF
  883. END FUNCTION
  884.  
  885.